%%%-------------------------------------------------------------------
%%% @author 25232
%%% @copyright (C) 2025, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 23. 9月 2025 8:07
%%%-------------------------------------------------------------------
-module(redis_util).
-author("25232").

%% API
-export([
  get_addr/1,
  to_binary/1
]).

get_addr({local, Path}) ->
  {ok, {local, {local, Path}}};
get_addr(Hostname) ->
  case inet:parse_address(Hostname) of
    {ok, {_,_,_,_} = Addr} ->         {ok, {inet, Addr}};
    {ok, {_,_,_,_,_,_,_,_} = Addr} -> {ok, {inet6, Addr}};
    {error, einval} ->
      case inet:getaddr(Hostname, inet6) of
        {error, _} ->
          case inet:getaddr(Hostname, inet) of
            {ok, Addr}-> {ok, {inet, Addr}};
            {error, _} = Res -> Res
          end;
        {ok, Addr} -> {ok, {inet6, Addr}}
      end
  end.

%% 转换为二进制
to_binary(Msg) when is_binary(Msg) -> Msg;
to_binary(Msg) when is_atom(Msg) ->
  list_to_binary(atom_to_list(Msg));
to_binary(Msg) when is_list(Msg) ->
  unicode:characters_to_binary(Msg, utf8);
to_binary(Msg) when is_integer(Msg) ->
  list_to_binary(integer_to_list(Msg));
to_binary(Msg) when is_float(Msg) ->
  float_to_binary(Msg);
to_binary(Msg) when is_tuple(Msg) ->    %% 此处不能处理带中文的tuple
  list_to_binary(tuple_to_list(Msg));
to_binary(_) -> throw(other_value).
